package cn.tedu.weibo.service.impl;

import cn.tedu.weibo.exception.ServiceException;
import cn.tedu.weibo.mapper.UserMapper;
import cn.tedu.weibo.pojo.dto.UserLoginDTO;
import cn.tedu.weibo.pojo.dto.UserRegDTO;
import cn.tedu.weibo.pojo.entity.User;
import cn.tedu.weibo.pojo.vo.UserVO;
import cn.tedu.weibo.response.JsonResult;
import cn.tedu.weibo.response.StatusCode;
import cn.tedu.weibo.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import springfox.documentation.spring.web.json.Json;

import java.util.Date;

//  @Service 表示其为业务层实现类
@Service
public class UserServiceImpl implements UserService {

    // 业务层需要注入持久层对象
    @Autowired
    private UserMapper userMapper;

    @Override
    public void reg(UserRegDTO userRegDTO) {
        // 根据用户名查询用户是否存在
        UserVO userVO = userMapper.selectByUserName(userRegDTO.getUsername());
        // 如果不为空,说明用户已存在
        if (userVO!=null){
            // 业主如果遇到了问题,需要抛出业务异常,而不是直接给前端返回结果
            throw new ServiceException(StatusCode.USERNAME_ALREADY_EXISTS);
        }
        // 如果为空,新增用户
        User user = new User();
        BeanUtils.copyProperties(userRegDTO,user);
        user.setCreated(new Date());
        userMapper.insert(user);
    }

    @Override
    public UserVO login(UserLoginDTO userLoginDTO) {
        // 根据用户名查询用户是否存在
        UserVO userVO = userMapper.selectByUserName(userLoginDTO.getUsername());
        // 如果为空,说明用户不存在
        if (userVO==null){
            // 业主如果遇到了问题,需要抛出业务异常,而不是直接给前端返回结果
            throw new ServiceException(StatusCode.USERNAME_ERROR);
        }
        // 密码错误抛出异常
        if (!userVO.getPassword().equals(userLoginDTO.getPassword())){
            throw new ServiceException(StatusCode.PASSWORD_ERROR);
        }
        return userVO;
    }
}
